
#include <bits/stdc++.h>
using namespace std;
int a[200005], b[200005], c[200005];

// 优先队列模拟、

signed main() {
  int n, k;
  cin >> n >> k;
  int now = k; // 还能装多少
  for (int i = 1; i <= n; i++)
    cin >> a[i] >> b[i] >> c[i]; // 团队i到达时间、团队i逗留的时间、团队i的人数
  priority_queue<pair<int, int>, vector<pair<int, int>>,
                 greater<pair<int, int>>>
      q;
  //{离开的时间, 离开的人数}
  // 这种排序规则确保了：总是优先处理最早离开的团队,当多个团队同时离开时，优先处理人数较少的团队（虽然在实际场景中可能没有太大意义，但这是pair的默认比较行为）

  int t = 0; // 当前时间
  for (int i = 1; i <= n; i++) {
    while (now < c[i]) {     // 如果剩余容量不能让第i个团队进入
      t = q.top().first;     // 更新当前时间：
      now += q.top().second; // 更新剩余容量：加上之前团队离开的人数
      q.pop();
    }
    // 更新当前时间：取当前时间和团队到达时间的较大值
    t = max(t, a[i]);
    cout << t << endl;
    now -= c[i];              // 更新剩余容量：减去当前团队的人数
    q.push({t + b[i], c[i]}); // 将当前团队加入队列，记录其离开时间和人数
  }
  return 0;
}